// 属性初始化器
// concise method syntax
let person = (name, age = 16) => {
  return { name, age }
}

// 计算属性名
let lastName = 'last name';
let doc = {
    [lastName]: 'Zakas'
}
console.log(doc[lastName]);

// 此方法接受两个参数，并会在二者的值相等时返回 true ，此时要求二者类型相同并且值也相等
console.log(Object.is(+0, -0));

// Object.assign() 方法
let receiver = {}
Object.assign(receiver, {type:'js',name:'file.js'}, {type:'css'})
console.log(receiver)


// 原型访问 supper 方法
let dog = {
    getGreeting() {
        return "Woof";
    }
};

let friend = {
    getGreeting() {
        // return Object.getPrototypeOf(this).getGreeting.call(this) + ", hi!";
        return super.getGreeting() + ", hi!";
    }
};

Object.setPrototypeOf(friend, dog);
console.log(friend.getGreeting());                      // "Woof, hi!"
console.log(Object.getPrototypeOf(friend) === dog);     // true


// 在 ES6 之前，“方法”的概念从未被正式定义，它此前仅指对象的函数属性（而非数据属性）。
// ES6 则正式做出了定义：方法是一个拥有 [[HomeObject]] 内部属性的函数，此内部属性指向该方法所属的对象。
// 研究以下例子
let vv = {
    // 方法
    getGreeting() {
        return "Hello";
    }
};
// 并非方法
function shareGreeting() {
    return "Hi!";
}
